package com.liujit.gateway.utils;

import com.liujit.common.constants.ContentType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.lang.Nullable;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.Objects;

/**
 * @Description: 日志工具类
 * @Author: liujun
 * @Date: 2021/7/1 1:26 下午
 */
@Slf4j
public class LogUtil {

    private final static Map<String, String> FILE_CONTENT_TYPE = ContentType.getAllFile();

    /**
     * 根据MediaType获取字符集，如果获取不到，则默认返回<tt>UTF_8</tt>
     *
     * @param mediaType MediaType
     * @return
     * @author: liujun
     * @date: 2021/6/30 7:06 下午
     */
    public static Charset getCharset(@Nullable MediaType mediaType) {
        if (Objects.nonNull(mediaType) && mediaType.getCharset() != null) {
            return mediaType.getCharset();
        } else {
            return StandardCharsets.UTF_8;
        }
    }

    /**
     * 判断是否是上传文件
     *
     * @param mediaType MediaType
     * @return Boolean
     */
    public static boolean isUploadFile(@Nullable MediaType mediaType) {
        if (Objects.isNull(mediaType)) {
            return false;
        }
        String mediaTypeStr = mediaType.toString();
        // 处理类似multipart/form-data; boundary=<calculated when request is sent>的情况
        mediaTypeStr = mediaTypeStr.split(";")[0];
        return mediaTypeStr.equals(MediaType.MULTIPART_FORM_DATA.toString()) || mediaTypeStr
                .equals(MediaType.IMAGE_GIF.toString()) || mediaTypeStr.equals(MediaType.IMAGE_JPEG.toString())
                || mediaTypeStr.equals(MediaType.IMAGE_PNG.toString()) || mediaTypeStr
                .equals(MediaType.MULTIPART_MIXED.toString()) || FILE_CONTENT_TYPE.containsValue(mediaTypeStr);
    }
}
